import java.util.Scanner;

/**
 * @author Elísa og Ingvar
 * @version 1.0
 * @since 2/10/13
 */
public class Lexer {

    private Token token;
    private int count = 0;
    private Scanner scanner;
    private String[] str;

    /**
     * Lexer constructor
     */
    public Lexer(){
        scanner = new Scanner(System.in);
        token = new Token();

        String s = scanner.nextLine();
        str = splitString(s);
    }

    /**
     * Skilar næsta tóka
     * @return Token
     */
    public Token nextToken(){
        Token.TokenCode tempToken = null;

        if(hasNext()){
            tempToken = token.getTokenCode(str[count]);

            token.setTokeCode(tempToken);
            token.setLexeme(str[count]);
            count += 1;
        }

        return token;
    }

    /**
     * Ef count breytan er ekki orðin jöfn
     * str.lenght, skilar false annas true
     * @return bool
     */
    public boolean hasNext(){
        return str.length != count;
    }


    /**
     * Þetta fall sér um að taka inntaksstrauminn
     * og búa til streng sem er skiptur um ' '
     * síðan í endanum þá skiptir hann strengnum í
     * fylki af strengjum
     * @param @String.
     * @return String[].
     */
    private String[] splitString(String s){

        StringBuilder ble = new StringBuilder();

        char[] theString  = s.toCharArray();

        if(theString[0] == '('){
            ble.append(theString[0]);
            ble.append(' ');
        }

        for (int i = 0, theStringLength = theString.length; i < theStringLength; i++) {
            char aTheString = theString[i];


            if (aTheString >= '0' && aTheString <= '9') {
                ble.append(aTheString);
            } else if (aTheString == '+' || aTheString == '*' || aTheString == '(' || aTheString == ')') {
                ble.append(' ');
                ble.append(aTheString);
                ble.append(' ');
            }

        }

        ble.append(' ');
        ble.append('\n');

        return ble.toString().split("[ ]+");
    }


}
